﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdbool.h>
// 原题连接：https://leetcode.cn/problems/dui-cheng-de-er-cha-shu-lcof/
/*
题目描述：
请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。
例如，二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

 

示例 1：
输入：root = [1,2,2,3,4,4,3]
输出：true

示例 2：
输入：root = [1,2,2,null,3,null,3]
输出：false
 

限制：
0 <= 节点个数 <= 1000
*/

struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
};

// 开始解题：
bool _isSymmetric(struct TreeNode* root1, struct TreeNode* root2) {
    if (NULL == root1 && NULL == root2) {
        return true;
    }
    if (NULL == root1 || NULL == root2) {
        return false;
    }
    if (root1->val != root2->val) {
        return false;
    }
    return _isSymmetric(root1->left, root2->right) && _isSymmetric(root1->right, root2->left);
}


bool isSymmetric(struct TreeNode* root) {
    if (NULL == root) {
        return true;
    }
    return _isSymmetric(root->left, root->right);
}
